function f_return_alter_sql()
{
    #将注释里面的分号都替换成特殊字符, 为了方便将sql语句格式化, 都将分号作为结束符
    declare fun_name mark1 mark2 mark3 mark3_count
    fun_name="f_return_alter_sql"
    var_str1="###$(date +%N%s)###"     #将注释里面的分号替换成这个
    var_str2="===$(date +%N%s)==="     #将注释里面的逗号换成这个
    #处理sql文件, 将所有sql放在一行, 方便去掉 /**/ 这种注释, 并过滤掉--或者#的注释行, 这类注释要求--或者#打头或者其前面除了空格或者tab键外不能有其他字符
    line="$(sed 's/`/ /g' ${alter_file}|grep -Ev -- "^--|^#"|grep -Pv -- "^[ \t]{1,}(--|#)"|tr "\n" " "|sed -r 's#/\*[^*]+\*/##g'|sed 's#/\**\*/##g')" || true
    new_line=""                                                  #经过处理后的sql存放变量
    #检查sql基本语法, 检查无误后, 返回 new_line
    mark1=0                            #-1 0表示单引号左右边
    mark2=0                            #-1 0表示双引号左右边
    mark3=0                            #-1 0表示小括号左右边
    mark3_count=0                      #统计小括号出现的次数

    for ((i=0;i<${#line};i++))
    do
        tmp_str="${line:${i}:1}"       #挨个字符去判断检查
        if [ "${tmp_str}x" == "'x" ] && [ "${mark2}x" == "0x" ] && [ "${mark1}x" == "-1x" ]
        then #判断单引号是否成对出现, 进而判断是否存在逗号或者分号, 如果有则进行替换, 主要是为了格式化sql用
             #右边单引号
            mark1="0" 
        elif [ "${tmp_str}x" == "'x" ] && [ "${mark2}x" == "0x" ] && [ "${mark1}x" == "0x" ]
        then #判断单引号是否成对出现, 进而判断是否存在逗号或者分号, 如果有则进行替换, 主要是为了格式化sql用
            mark1="-1"
        elif [ "${tmp_str}x" == '"x' ] && [ "${mark1}x" == "0x" ] && [ "${mark2}x" == "-1x" ]
        then #同单引号注释
            mark2="0"
        elif [ "${tmp_str}x" == '"x' ] && [ "${mark1}x" == "0x" ] && [ "${mark2}x" == "0x" ]
        then #同单引号注释
            mark2="-1"
        fi

        if [ "${tmp_str}x" == "(x" ] && [ "${mark1}x" == "0x" ] && [ "${mark2}x" == "0x" ]
        then #判断小括号是否成对, 成对内的存在逗号 比如浮点数或者DECIMAL, 则将逗号替换掉
            mark3="-1"
            mark3_count="$((${mark3_count}+1))" #出现一次左边括号就+1, 出现一次右边括号就-1, 当这个计数器为0, 则表示括号成对, 否则就是不成对
        elif [ "${tmp_str}x" == ")x" ] && [ "${mark1}x" == "0x" ] && [ "${mark2}x" == "0x" ]
        then
            mark3="0"
            mark3_count="$((${mark3_count}-1))" #出现一次右小括号,就减一,如果出现了两次左边括号,而只出现一次右边括号,则还是认为现在的状态还是左边括号
            [ "${mark3_count}x" == "0x" ] && mark3="0" || mark3="-1"
        fi

        if [ "${mark1}x" == "-1x" -o "${mark2}x" == "-1x" -o "${mark3}x" == "-1x" ] && [ "${tmp_str}x" == ",x" ]
        then #将注释内或者小括号内的逗号用特殊字符代替
            tmp_str="${var_str2}"
        elif [ "${mark1}x" == "-1x" -o "${mark2}x" == "-1x" -o "${mark3}x" == "-1x" ] && [ "${tmp_str}x" == ";x" ]
        then #将注释内的分号用特殊符号代替
            tmp_str="${var_str1}"
        elif [ "${mark1}x" == "0x" -a "${mark2}x" == "0x" ] && [ "${tmp_str}x" == "#x" -o "${line:${i}:3}x" == "-- x" ]
        then #判断是否有--或者#这种注释, 且在引号之外的
            grep -- "$(awk '{print $1}' <<< "${line:${i}:100}")" ${sql_file} || true
            f_logging "ERROR:${fun_name}" "sql语句中存在使用 '#' 或者 '-- ' 做单行注释的情况, 目前不支持这种注释方式, 请使用 '/* xxx */' 这种注释方式" "2" "1"
        fi

        new_line="${new_line}${tmp_str}"
    done
    
    if [ "${mark1}x" == "-1x" ]
    then
        f_logging "ERROR:${fun_name}" "sql语句中, 存在单引号不成对出现情况, 请检查后重新提交 " "2" "1"
    elif [ "${mark2}x" == "-1x" ]
    then
        f_logging "ERROR:${fun_name}" "sql语句中, 存在双引号不成对出现情况, 请检查后重新提交" "2" "1"
    elif [ "${mark3}x" == "-1x" ]
    then
        f_logging "ERROR:${fun_name}" "sql语句中, 存在小括号不成对出现情况, 请检查后重新提交" "2" "1"
    fi
    return 0
}

